import os
from fpdf import FPDF


# 定义一个支持 Unicode 的 FPDF 子类
class UnicodePDF(FPDF):
    def __init__(self):
        super().__init__()
        self.add_font('Noto', '', 'NotoSansSC-Regular.ttf', uni=True)  # 添加支持 Unicode 的字体
    def write_text(self, text):
        self.set_font("Noto", size=12)
        self.multi_cell(0, 10, txt=text)


def txt_to_pdf(txt_file_path, pdf_file_path):
    """
    将单个txt文件转换为pdf文件。
    :param txt_file_path: 输入的txt文件路径
    :param pdf_file_path: 输出的pdf文件路径
    """
    pdf = UnicodePDF()
    pdf.add_page()

    with open(txt_file_path, 'r', encoding='utf-8') as file:
        text = file.read()  # 读取整个文件内容
        pdf.write_text(text)

    pdf.output(pdf_file_path)


def convert_txt_to_pdf(input_folder, output_folder):
    """
    将输入文件夹中的所有txt文件转换为pdf文件，并保存到输出文件夹。
    :param input_folder: 包含txt文件的输入文件夹路径
    :param output_folder: 存放pdf文件的输出文件夹路径
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        if filename.endswith(".txt"):
            txt_file_path = os.path.join(input_folder, filename)
            pdf_filename = os.path.splitext(filename)[0] + ".pdf"
            pdf_file_path = os.path.join(output_folder, pdf_filename)

            print(f"正在处理: {txt_file_path} -> {pdf_file_path}")
            txt_to_pdf(txt_file_path, pdf_file_path)

    print("所有txt文件已成功转换为pdf文件！")


if __name__ == "__main__":
    # 设置输入和输出文件夹路径
    input_folder = "D:\ima测试\源文档"  # 替换为你的txt文件所在的文件夹路径
    output_folder = "D:\ima测试\pdf文档"  # 替换为你希望存放pdf文件的文件夹路径

    # 执行转换
    convert_txt_to_pdf(input_folder, output_folder)
